#Область ОбработчикиСобытий

#Область ВыполнениеАлгоритмов

Функция ВыполнениеАлгоритмовРезультатВыполнения(Запрос)
	WebID = Запрос.ПараметрыURL["AlgWebID"];

	СтруктураВходящиеПараметры = Новый Структура;
	Для Каждого Параметр Из Запрос.ПараметрыЗапроса Цикл
		СтруктураВходящиеПараметры.Вставить(Параметр.Ключ, Параметр.Значение);
	КонецЦикла;
	СтруктураОтвет = Новый Структура("КодСостояния,ТелоОтвета", 200, "обработка метода GET ");

	ОбработатьЗапрос(WebID, СтруктураВходящиеПараметры, СтруктураОтвет);

	Возврат ОтветСервиса(СтруктураОтвет.КодСостояния, СтруктураОтвет.ТелоОтвета);
КонецФункции



#КонецОбласти

#Область Ping


Функция PingGET(Запрос)
	Возврат ОтветСервиса(200, "OK");
КонецФункции

#КонецОбласти

#Область ПередачаДанных

Функция ПередачаДанныхSendFileAndUpload(Запрос)

	ОшибкаЗагрузки=Ложь;
	ОшибкаСервиса="";
	ЛогЗагрузки="";

	Попытка

		ИмяФайла = ПолучитьИмяВременногоФайла("zip");
		ДвоичныеДанныеОбмена=Запрос.ПолучитьТелоКакДвоичныеДанные();
		ДвоичныеДанныеОбмена.Записать(ИмяФайла);

		ИмяФайлаЛогаЗагрузки=ПолучитьИмяВременногоФайла("txt");

		Обработка = Обработки.УИ_УниверсальныйОбменДаннымиXML.Создать();
		Обработка.РежимОбмена = "Загрузка";
		Обработка.ИмяФайлаОбмена = ИмяФайла;
		Обработка.ИмяФайлаПротоколаОбмена=ИмяФайлаЛогаЗагрузки;
		Обработка.КодировкаФайлаПротоколаОбмена="UTF-8";
		Обработка.ВыполнитьЗагрузку();

		ОшибкаЗагрузки=Обработка.ФлагОшибки;
		УдалитьФайлы(ИмяФайла);

		ФайлЛога=Новый Файл(ИмяФайлаЛогаЗагрузки);
		Если ФайлЛога.Существует() Тогда
			ТекстЛога=Новый ТекстовыйДокумент;
			ТекстЛога.Прочитать(ИмяФайлаЛогаЗагрузки);

			ЛогЗагрузки=ТекстЛога.ПолучитьТекст();
			ТекстЛога=Неопределено;

			УдалитьФайлы(ИмяФайлаЛогаЗагрузки);

		КонецЕсли;
	Исключение
		ОшибкаСервиса = ОписаниеОшибки();
	КонецПопытки;

	СтруктураОтвета=Новый Структура;
	СтруктураОтвета.Вставить("ОшибкаСервиса", ОшибкаСервиса);
	СтруктураОтвета.Вставить("ОшибкаЗагрузки", ОшибкаЗагрузки);
	СтруктураОтвета.Вставить("ЛогЗагрузки", ЛогЗагрузки);

	ЗаписьJSON=Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();

	ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);

	Возврат ОтветСервиса(200, ЗаписьJSON.Закрыть(), "application/json; charset=utf-8");

КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции


Процедура ОбработатьЗапрос(WebID, ВходящиеПараметры, Ответ)
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|   _37583_ALG.Ссылка КАК Алгоритм
	|ИЗ
	|   Справочник.УИ_Алгоритмы КАК _37583_ALG
	|ГДЕ
	|   _37583_ALG.ИдентификаторHTTP = &WebID";

	Запрос.УстановитьПараметр("WebID", WebID);

	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Ответ.КодСостояния = 404;
		Ответ.ТелоОтвета = "Ошибка: не найден алгоритм";
		Возврат;
	КонецЕсли;

	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	ВыборкаДетальныеЗаписи.Следующий();
	РезультатВыполнения = УИ_АлгоритмыСервер.ВыполнитьАлгоритм(ВыборкаДетальныеЗаписи.Алгоритм);
	Если РезультатВыполнения = Неопределено Тогда
		Ответ.КодСостояния = 404;
		Ответ.ТелоОтвета = "Ошибка: Путой алгоритм";
		Возврат;
	КонецЕсли;
	
	Ответ.ТелоОтвета = УИ_ОбщегоНазначенияКлиентСервер.мЗаписатьJSON(РезультатВыполнения);
	
КонецПроцедуры


Функция ОтветСервиса(КодСостояния, Тело, ТипКонтента = "text/html; charset=utf-8")
	Ответ = Новый HTTPСервисОтвет(КодСостояния);
	Ответ.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8);
	Ответ.Заголовки.Вставить("Content-Type", ТипКонтента);
	Возврат Ответ;

КонецФункции

#КонецОбласти

